<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Route;
use App\Admin\Auth;

class AuthController extends Controller
{
    //权限列表展示
    public function index(Request $request)
    {
        if ($request->expectsJson()) {
            //ajax请求
            //权限列表 datatable的ajax 加载
            $data = Auth::orderBy('path')->get();
            $jsonData['data'] = $data;
            return response()->json($jsonData);
        } else {

            $data = Auth::orderBy('path')->get();
            return view('admin.auth.index', compact('data'));
        }
    }

    //权限添加
    public function add(Request $request)
    {
        if ($request->isMethod('POST')) {
            //  sleep (3);//睡3秒
            //表单提交的只有3个信息(auth_name,pid,url)
            $auth = new Auth();
            $post_data = $request->only(['auth_name', 'pid']);
            //通过算法制作 path 和 level，并实现整条记录的填充 
            $result = $auth->saveData($post_data);
         	//由于框架自身不支持响应bool值，所以转化一种形式
            return $result ? '1' : '0';
        } else {
            // sleep (3);//睡3秒

            return view('admin.auth.add');
        }

    }

        //权限修改
    public function edit(Request $request)
    {
        $auth = new Auth();

        if ($request->isMethod('POST')) {
                //  sleep (3);//睡3秒
            $data = $request->only(['id', 'auth_name', 'pid','sort']);
                //交给模型处理数据
            $result = $auth->updateData($data);
                 //由于框架自身不支持响应bool值，所以转化一种形式
            return $result ? '1' : '0';
        } else {
            //查询要修改的权限信息
            $auth_info_current = $auth->find($request->input('id'));
            if ($auth_info_current) {
                //查到了结果
                $auth_info_all = $auth->where('auth_name', '<>', '')->where('level', '<', '2')->orderBy('path')->get();

                return view('admin.auth.edit', compact('auth_info_current', 'auth_info_all'));
            } else {
                //未查到结果
                $error_title = '';
                $error_description = '当前记录已经删除 ~';

                $js = <<<eof
                    <script type="text/javascript">
                        parent.table_reload(0);//0停留在当前页，1回到第一页
                    </script>
eof;
                echo view('errors.error', compact('error_title', 'error_description'));
                return $js;

            }

        }
    }

    //权限删除
    public function del(Request $request)
    {

        $auth = new Auth();
        //   sleep (3);//睡3秒
        $id = $request->input('id');
                //交给模型处理数据  delete 返回受影响的行数
        $result = $auth->where('id', $id)->delete();
                 //由于框架自身不支持响应bool值，所以转化一种形式
        return $result >= 0 ? '1' : '0';

    }

    //读取路由信息，自动添加权限
    public function autoAdd()
    {
        //查询出数据库 auth 表中已有的 url 集合
        $old_urls = Auth::where('url', '<>', '')->pluck('url');
        //转为数组
        $old_urls = $old_urls->toArray();

            //添加两个  是人就有的权限
        // $old_urls[] = 'admin/index/index';
        // $old_urls[] = 'admin/index/welcome';
        
         //获取路由对象集合
        $routes = app()->routes->getRoutes();
        $new_urls = [];
        foreach ($routes as $val) {
            $middleware_arr = $val->action['middleware'];
            //遍历时筛选：路由启用了 checkrbac 中间件认证，并且 数据库中不存在此url
            $b = in_array('checkrbac', $middleware_arr) && !in_array($val->uri, $old_urls);
            if ($b) {
                $new_urls[] = ['url' => $val->uri];
            }
        }
        if ($new_urls) {
            //即便$new_urls是一个空数组， insert依然返回 true
            $result = Auth::insert($new_urls);
            return $result ? '1' : '0';
        } else {
            return '2';//没有新数据返回 2
        }


    }
    //通过数组的值，删除元素
    public function delArrByValue($arr, $value)
    {
        // 使用 array_keys 搜索指定的值再循环unset
        $keys = array_keys($arr, $value);
        if (!empty($keys)) {
            foreach ($keys as $key) {
                unset($arr[$key]);
            }
        }
        return $arr;
    }

}
